package com.neuedu.corejava.ch8;

public class Student {
	private String name;
	private double computer;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getComputer() {
		return computer;
	}

	public void setComputer(double computer) {
		this.computer = computer;
	}

	public Student(String name, double computer) {
		super();
		this.name = name;
		this.computer = computer;
	}

	public void showInfo() throws CrmException {// 在方法内部如果有异常抛出，则需要在方法定义时声明异常
		if (computer < 0) {
			// 在方法编写时可以使用throw抛出一个异常对象，如果抛出的是一个检查异常，则需要进行异常处理
			throw new CrmException("课程成绩不能为负数");
			// 检查异常必须进行处理，方法定义时一般进行声明
		}

		System.out.println("姓名：" + name + " 成绩：" + computer);
	}

	// 运行时异常可以不用声明，声明异常时可以声明多个异常，有父子关系也可以声明
	public void showInfo2() throws RuntimeException, IllegalArgumentException {// 在方法内部如果有异常抛出，则需要在方法定义时声明异常，声明的异常必须是抛出的异常或抛出异常的父类
		if (computer < 0) {
			// RuntimeException运行时异常可以不进行处理
			throw new RuntimeException("课程成绩不能为负数");
		}

		if (computer > 100) {
			throw new IllegalArgumentException("成绩不能大于100");
		}
		System.out.println("姓名：" + name + " 成绩：" + computer);
	}

	public static void main(String[] args) {
		Student student = new Student("张三", 198);
		try {
			student.showInfo2();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public boolean equals(Object obj) {
		// 判断是否为同一个对象
		if (obj instanceof Student) {
			boolean ret = this.hashCode() == obj.hashCode();
			Student student = (Student) obj;
			ret = ret
					|| (computer == student.getComputer() && name
							.equals(student.getName()));
			return ret;
		} else {
			return false;
		}

	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Student [name=" + name + ", computer=" + computer + "]";
	}

	

	
	
	

}
